package br.com.werp.regras.auditoria;

import br.com.werp.regras.auditoria.controle.ControleAuditoria;
import br.com.werp.regras.auditoria.controle.ControleRelatorioAuditoria;
import br.com.werp.regras.geral.Auditoria;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.GerenciadorErros;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.relatorio.RelatorioVO;

import java.util.List;


/**
 * @author Sobreira
 * Created on 20/10/2004
 */
public class AuditoriaImpl implements Auditoria {
    private static AuditoriaImpl auditoriaImpl;
    private ControleAuditoria controleAditoria = new ControleAuditoria();
    private ControleRelatorioAuditoria controleRelatorio = new ControleRelatorioAuditoria();

    private AuditoriaImpl() {
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Suporte#gerarGraficoAuditoria(java.lang.Object)
     */
    public RelatorioVO gerarGraficoAuditoria(Object auditoriaVO)
        throws ErroPadrao {
        try {
            RelatorioVO relatorioVO = null;
            relatorioVO = controleRelatorio.gerarGraficoAuditoria(auditoriaVO);

            return relatorioVO;
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
         * @see br.com.werp.regras.geral.Suporte#gerarRelatorioAuditoria(java.lang.String, java.lang.String, java.lang.String[])
         */
    public RelatorioVO gerarRelatorioAuditoria(Object auditoriaVO,
        String requisitor, String empresa) throws ErroPadrao {
        try {
            RelatorioVO relatorioVO = null;
            relatorioVO = controleRelatorio.gerarRelatorioAuditoria(auditoriaVO,
                    requisitor, empresa);

            return relatorioVO;
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public static AuditoriaImpl getAuditoriaImpl() {
        if (auditoriaImpl == null) {
            auditoriaImpl = new AuditoriaImpl();
        }

        return auditoriaImpl;
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Auditoria#logarErro(java.lang.Exception)
     */
    public void logarErro(Exception e) {
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Auditoria#logarErro(java.lang.String)
     */
    public void logarErro(String s) {
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Auditoria#logarErro(java.lang.Exception, java.lang.String)
     */
    public void logarErro(Exception e, String s) {
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Auditoria#auditarRecurso(java.lang.String, java.lang.Object, java.lang.String, java.lang.String)
     */
    public void auditarRecurso(Object conn, Object usuario, Object vo,
        String operacao, String recurso) throws ErroPadrao {
        try {
            controleAditoria.auditarRecurso(conn, usuario, vo, operacao, recurso);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Auditoria#auditarRecurso(java.lang.Object, java.lang.Object, java.lang.String)
     */
    public void auditarRecurso(Object conn, Object usuario, Object vo,
        String operacao) throws ErroPadrao {
        try {
            controleAditoria.auditarRecurso(conn, usuario, vo, operacao,
                Util.tabelaVONome(vo));
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
         * @see br.com.werp.regras.geral.Auditoria#pesquisarOperacoes()
         */
    public List pesquisarOperacoes() throws ErroPadrao {
        try {
            return controleAditoria.pesquisarOperacoes();
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void auditarRelatorio(Object usuario, Object formulario,
        String nomeRelatorio) throws ErroPadrao {
        try {
            controleAditoria.auditarRelatorio(usuario, formulario, nomeRelatorio);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }
}
